package com.yanu.trace.t2s.controller;

import com.yanu.trace.t2s.util.InviteCode;
import com.yanu.trace.t2s.util.md5;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yanu.trace.t2s.entity.Enterprise;
import com.yanu.trace.t2s.service.EnterpriseService;
import com.yanu.trace.t2s.util.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.Locale;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author whj
 * @since 2021-06-23
 */
@CrossOrigin
@RestController
@RequestMapping("/enterprise")
public class EnterpriseController {
    @Autowired
    EnterpriseService enterpriseService;

    @PostMapping("/list")  //分页查询所有企业
    public Message list(@RequestBody String info) {
        Message msg = new Message();
        JSONObject jsonObject = JSONObject.parseObject(info);
        IPage<Enterprise> iPage = enterpriseService.selectByPage(new Page<>(jsonObject.getInteger("current"),
                jsonObject.getInteger("size")));//根据传入的页面的页数和大小构造page类并调用service层进行查询
        if (iPage!=null) {//如果最后的页数对象不为0则为成功 否则失败
            msg.setSuccess(iPage);//成功后返回ipage对象 里面包括分页信息
        } else
            msg.setFail(412);
        return msg;
    }

    /**
     * 修改企业信息或者添加企业
     * @param info
     * @return
     */
    @PostMapping("/updateoradd")
    public Message updateoradd(@RequestBody String info) {
        Message msg = new Message();
        Enterprise enterprise = JSON.parseObject(info, Enterprise.class);//将json数据直接实例化成企业实体对象
        String invite_code = enterprise.getInvite_code();//获取企业邀请码
        if(invite_code==null || invite_code.isEmpty()){//如果邀请码不存在则创建企业邀请码
            do{
                enterprise.setInvite_code(InviteCode.CreateInviteCode());
            }while (enterpriseService.getbyinvite_code(invite_code) != null);
        }
        if (enterpriseService.saveOrUpdate(enterprise))//对企业进行更新或者增加
            msg.setSuccess(null);
        else
            msg.setFail(415);
        return msg;
    }

    @PostMapping("/delete")
    public Message deleteent(@RequestBody String info) {
        Message msg = new Message();
        JSONObject jsonObject = JSONObject.parseObject(info);
        JSONArray array = jsonObject.getJSONArray("eid");//获取json中的eid数组 进行批量企业的删除
        for (int i = 0; i < array.size(); i++) {
            if (!enterpriseService.removeById(array.getInteger(i)))
                msg.setFail(416);
        }
        msg.setSuccess(null);
        return msg;
    }

    /**
     * 对企业进行审核  此操作应由超级管理员进行 即溯源平台的管理员 决定是否把该企业审核通过加入流通节点
     * @param info 传入eid 和examine（是否通过）
     * @return
     */
    @PostMapping("/examine")
    public Message examineEnter(@RequestBody String info) {
        Message msg = new Message();
        JSONObject jsonObject = JSONObject.parseObject(info);
        JSONArray array = jsonObject.getJSONArray("eid");//获取eid数组
        for (int i = 0; i < array.size(); i++) {
            UpdateWrapper<Enterprise> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("id", array.getInteger(i)).set("examine", jsonObject.getInteger("examine"));//根据id查询 设置审核状态为1或者0
            if (!enterpriseService.update(updateWrapper)) {
                msg.setFail(419);
                return msg;
            }

        }
        msg.setSuccess(null);
        return msg;
    }

    /**
     * 设置邀请码
     * @param info  传入eid和invite_code
     * @return
     */
    @PostMapping("/setcode")
    public Message setInviteCode(@RequestBody String info) {
        Message msg = new Message();
        JSONObject jsonObject = JSONObject.parseObject(info);
        Enterprise enterprise = enterpriseService.getById(jsonObject.getString("eid"));
        String invite_code = jsonObject.getString("invite_code");
        if(invite_code == null || invite_code.isEmpty()) {
            do{
                invite_code = InviteCode.CreateInviteCode();
            }while (enterpriseService.getbyinvite_code(invite_code) != null);
            enterprise.setInvite_code(invite_code);
        } else {
            enterprise.setInvite_code(invite_code);
        }
        enterpriseService.updateById(enterprise);
        msg.setSuccess(null);
        return msg;
    }

    @PostMapping("/getinfo")//根据企业id获取企业的信息
    public Message getinfo(@RequestBody String info)
    {
        Message msg=new Message();
        JSONObject jsonObject=JSONObject.parseObject(info);
        String eid = jsonObject.getString("eid");
        Enterprise enterprise=enterpriseService.getById(eid);
        if (enterprise!=null)
            msg.setSuccess(enterprise);
        else msg.setFail(421);
        return msg;
    }

    /**
     * 根据邀请码判断是否存在该企业来决定该新用户是否加入到企业中
     * @param info
     * @return
     */
    @PostMapping("/verifycode")
    public Message verifyInviteCode(@RequestBody String info)
    {
        Message msg=new Message();
        JSONObject jsonObject=JSONObject.parseObject(info);
        String s = jsonObject.getString("invite_code");
        msg.setCode(200);
        if(s == null || s.isEmpty()) {
            msg.setMsg("empty");
            return msg;
        }
        Enterprise enterprise=enterpriseService.getbyinvite_code(s);
        if (enterprise == null)
            msg.setMsg("empty");
        else msg.setMsg("ok");
        return msg;
    }

}

